﻿#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

//定义双向链表结构
typedef int LTDataType;
typedef struct ListNode {
	LTDataType data;
	struct ListNode* next; //指向下一个节点的指针
	struct ListNode* prev; //指向前一个节点的指针
}LTNode;

//初始化
//void LTInit(LTNode** pphead);
LTNode* LTInit();

//销毁---为了保持接口一致性
//void LTDesTroy(LTNode** pphead);
void LTDesTroy(LTNode* phead);


//在双向链表中，增删改查都不会改变哨兵位节点
//尾插
void LTPushBack(LTNode* phead, LTDataType x);
//头插
void LTPushFront(LTNode* phead, LTDataType x);
//尾删
void LTPopBack(LTNode* phead);
//头删
void LTPopFront(LTNode* phead);

bool LTEmpty(LTNode* phead);
void LTPrint(LTNode* phead);


LTNode* LTFind(LTNode* phead, LTDataType x);
//在pos位置之后插⼊数据----在pos位置之前插入数据自行实现
void LTInsert(LTNode* pos, LTDataType x);

//删除pos位置的节点
void LTErase(LTNode* pos);